package math

import "Go-miniSTL/comparable"

func MinInt(a, b int) int {
	if b < a {
		return b
	} else {
		return a
	}
}

func MaxInt(a, b int) int {
	if a < b {
		return b
	} else {
		return a
	}
}

func Min32(a, b int32) int32 {
	if b < a {
		return b
	} else {
		return a
	}
}

func Max32(a, b int32) int32 {
	if a < b {
		return b
	} else {
		return a
	}
}

func Min16(a, b int16) int16 {
	if b < a {
		return b
	} else {
		return a
	}
}

func Max16(a, b int16) int16 {
	if a < b {
		return b
	} else {
		return a
	}
}

func Min(A, B interface{}) interface{} {
	a := A.(comparable.Comparable)
	b := B.(comparable.Comparable)
	if b.Less(a) {
		return b
	} else {
		return a
	}
}

func Max(A, B interface{}) interface{} {
	a := A.(comparable.Comparable)
	b := B.(comparable.Comparable)
	if a.Less(b) {
		return a
	} else {
		return b
	}
}

func GcdInt(a, b int) int {
	if b == 0 {
		return a
	} else {
		return GcdInt(b, a%b)
	}
}

func Gcd32(a, b int32) int32 {
	if b == 0 {
		return a
	} else {
		return Gcd32(b, a%b)
	}
}
